package com.huiw.archives.common.utils.database;

import java.util.Map;

import org.apache.commons.lang.StringUtils;

import com.huiw.archives.common.utils.database.xss.SQLFilter;

/**
 * 分页参数对象
 *
 * @author yangc
 * @email yangcheng@huiwtech.com
 * @date 2017-03-14 23:15
 */
public class PageParams {
	// 当前页码
	private int page;
	// 每页条数
	private int limit;
	// 偏移量
	private int offset;
	// 排序字段
	private String sidx;
	// 排序类型（升序、降序）
	private boolean order;

	public PageParams() {
	}

	/**
	 * @param page
	 * @param limit
	 * @param offset
	 * @param sidx
	 * @param order
	 */
	public PageParams(PageParams params) {

		super();
		if (params.getLimit() == 0) {
			this.page = -1;
			this.limit = -1;
		} else {
			this.page = params.getPage();
			this.limit = params.getLimit();
		}

		this.offset = (page - 1) * limit;
		// 防止SQL注入（因为sidx、order是通过拼接SQL实现排序的，会有SQL注入风险）
		this.sidx = params.getSidx() == null ? "" : params.getSidx().toString();
		if (StringUtils.isNotBlank(this.sidx)) {
			this.sidx = SQLFilter.sqlInject(this.sidx);
		}
		this.order = params.getOrder();
	}

	public PageParams(Map<String, Object> params) {

		// 分页参数
		this.page = params.get("page") == null ? -1 : Integer.valueOf(params.get("page").toString());
		this.limit = params.get("limit") == null ? -1 : Integer.valueOf(params.get("limit").toString());
		this.offset = (page - 1) * limit;

		// 防止SQL注入（因为sidx、order是通过拼接SQL实现排序的，会有SQL注入风险）
		this.sidx = params.get("sidx") == null ? "" : params.get("sidx").toString();
		if (StringUtils.isNotBlank(this.sidx)) {
			this.sidx = SQLFilter.sqlInject(this.sidx);
		}
		this.order = params.get("order").equals("asc") ? true : false;

	}

	public int getPage() {
		return page;
	}

	public void setPage(int page) {
		this.page = page;
	}

	public int getLimit() {
		return limit;
	}

	public void setLimit(int limit) {
		this.limit = limit;
	}

	/**
	 * @return the offset
	 */
	public int getOffset() {
		return offset;
	}

	/**
	 * @param offset
	 *            the offset to set
	 */
	public void setOffset(int offset) {
		this.offset = offset;
	}

	/**
	 * 排序字段
	 * 
	 * @return the sidx
	 */
	public String getSidx() {
		return sidx;
	}

	/**
	 * @param sidx
	 *            排序字段
	 */
	public void setSidx(String sidx) {
		this.sidx = sidx;
	}

	/**
	 * @return the order
	 */
	public boolean getOrder() {
		return order;
	}

	/**
	 * @param order
	 *            the order to set
	 */
	public void setOrder(boolean order) {
		this.order = order;
	}

	public static void main(String[] args) {
		System.out.println((int) 3.0);
	}
}
